package com.example.blog.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 *  mybatis-plus 自动填充功能
 */
@Slf4j // 使用 lombok 框架的 @Slf4j 注解，自动生成 log 对象
@Component // 表示这是一个由 Spring 管理的组件
public class MyMetaObjectHandler implements MetaObjectHandler {

    // insertFill 方法的实现，用于自动填充插入记录时的 createTime 字段
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ...."); // 打印日志
        // strictInsertFill 是 Mybatis-Plus 3.3.0 版本新增的方法，使用 Java 反射为 createTime 自动赋值
        // 参数 metaObject 表示当前正在操作的对象实例，
        // createTime 表示要填充的属性名，
        // Date.class 表示属性的类型，
        // new Date() 表示要设置的属性值，这里设置为当前时间
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
    }

    // updateFill 方法的实现，用于自动更新更新时间
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ...."); // 打印日志
        // setFieldValByName 是 Mybatis-Plus 框架提供的方法，用于为指定属性名的属性设置值
        // updateTime 表示要更新的属性名
        // new Date() 表示要设置的属性值，这里设置为当前时间
        // metaObject 表示当前正在操作的对象实例
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}